home *** CD-ROM | disk | FTP | other *** search
/ Aminet 51 / Aminet 51 (2002)(GTI - Schatztruhe)[!][Oct 2002].iso / Aminet / util / boot / CardReset.lha / CardReset.ASM next >
Encoding:
Assembly Source File  |  2002-08-15  |  3.2 KB  |  189 lines

  1. ;CardReset.source VER: 3.0 (26.07.2002)
  2.  
  3.  
  4.     INCDIR    "Include:"
  5.  
  6.     INCLUDE    "exec/nodes.i"
  7.     INCLUDE    "exec/memory.i"
  8.     INCLUDE    "exec/interrupts.i"
  9.     INCLUDE    "dos/dos.i"
  10.     INCLUDE    "resources/card.i"
  11.  
  12.  
  13. _LVOOpenLibrary        EQU    -552
  14. _LVOCloseLibrary    EQU    -414
  15. _LVOOpenResource    EQU    -498
  16. _LVOAllocEntry        EQU    -222
  17. _LVOFreeEntry        EQU    -228
  18. _LVODisable        EQU    -120
  19. _LVOEnable        EQU    -126
  20.  
  21. _LVOReadArgs        EQU    -798
  22. _LVOFreeArgs        EQU    -858
  23. _LVODelay        EQU    -198
  24.  
  25. _LVOOwnCard        EQU    -6
  26. _LVOReleaseCard        EQU    -12
  27.  
  28.  
  29. CardResetCode:
  30.  
  31.         movea.l    4.w,a6
  32.         move.l    a6,d7            ;d7=ExecBase
  33.  
  34.         moveq    #RETURN_ERROR,d4
  35.         lea    .dosname(pc),a1
  36.         moveq    #36,d0
  37.         jsr    _LVOOpenLibrary(a6)
  38.         move.l    d0,d6            ;d6=DosBase
  39.         beq.w    .end
  40.  
  41.         lea    .cardname(pc),a1
  42.         jsr    _LVOOpenResource(a6)
  43.         move.l    d0,d5            ;d5=CardBase
  44.         beq.w    .dosclose
  45.         moveq    #RETURN_OK,d4
  46.  
  47.         movea.l    d6,a6
  48.         lea    .template(pc),a0
  49.         move.l    a0,d1
  50.         lea    .ticks(pc),a5        ;a5=ReadArgs Array
  51.         move.l    a5,d2
  52.         moveq    #0,d3
  53.         jsr    _LVOReadArgs(a6)
  54.  
  55.         moveq    #15,d3
  56.         move.l    d0,d1
  57.         beq.s    .default
  58.  
  59.         tst.l    (a5)
  60.         beq.s    .freeargs
  61.  
  62.         movea.l    (a5),a0
  63.         move.l    (a0),d3
  64.         moveq    #50,d0
  65.         cmp.l    d0,d3
  66.         ble.s    .freeargs
  67.         move.l    d0,d3
  68.  
  69. .freeargs    jsr    _LVOFreeArgs(a6)
  70.  
  71. .default    tst.l    d3            ;d3=TICKS
  72.         ble.w    .audio
  73.  
  74.         moveq    #RETURN_FAIL,d4
  75.         suba.l    a3,a3
  76.         suba.l    a4,a4
  77.         movea.l    d7,a6
  78.         lea    .memlist(pc),a0
  79.         jsr    _LVOAllocEntry(a6)
  80.         btst.l    #31,d0
  81.         bne.w    .dosclose
  82.         moveq    #RETURN_OK,d4
  83.  
  84.         movea.l    d0,a4            ;a4=MemList
  85.         movea.l    ML_SIZE+ME_ADDR(a4),a2
  86.         lea    .ownname(pc),a0
  87.         move.l    a0,LN_NAME(a2)
  88.  
  89.         movea.l    ML_SIZE+ME_SIZE+ME_ADDR(a4),a0
  90.         lea    .intcode(pc),a1
  91.         move.l    a1,IS_CODE(a0)
  92.         move.l    a0,cah_CardRemoved(a2)
  93.  
  94.         movea.l    ML_SIZE+2*ME_SIZE+ME_ADDR(a4),a0
  95.         move.l    a1,IS_CODE(a0)
  96.         move.l    a0,cah_CardInserted(a2)
  97.  
  98.         move.b    #CARDF_IFAVAILABLE,cah_CardFlags(a2)
  99.  
  100.         movea.l    d5,a6
  101.         movea.l    a2,a1
  102.         jsr    _LVOOwnCard(a6)
  103.         tst.l    d0
  104.         bne.s    .forcetst
  105.         movea.l    a2,a3            ;a3=CardHandle
  106.         bra.s    .reset
  107.  
  108. .forcetst    moveq    #RETURN_ERROR,d4
  109.         tst.l    4(a5)
  110.         beq.s    .freeentry
  111.         moveq    #RETURN_WARN,d4
  112.  
  113. .reset        movea.l    #$DA9000,a2        ;GAYLE INTREQ register
  114.         move.b    #$FF,(a2)        ;PCMCIA reset start
  115.         movea.l    d6,a6
  116.         move.l    d3,d1
  117.         jsr    _LVODelay(a6)
  118.         move.b    #$FC,(a2)        ;PCMCIA reset stop
  119.  
  120.         move.l    a3,d0
  121.         beq.s    .freeentry
  122.         movea.l    d5,a6
  123.         movea.l    a3,a1
  124.         moveq    #CARDF_REMOVEHANDLE,d0
  125.         jsr    _LVOReleaseCard(a6)
  126.  
  127. .freeentry    move.l    a4,d0
  128.         beq.s    .audio
  129.         movea.l    d7,a6
  130.         movea.l    a4,a0
  131.         jsr    _LVOFreeEntry(a6)
  132.  
  133. .audio        cmpi.l    #"BOOL",8(a5)
  134.         beq.s    .intdis
  135.  
  136.         movea.l    d7,a6
  137.         movea.l    #$DA8000,a0        ;GAYLE STATUS register
  138.         jsr    _LVODisable(a6)
  139.         move.b    (a0),d0
  140.         andi.b    #$09,d0
  141.         tst.l    8(a5)
  142.         beq.s    .noaudio
  143.         bset.l    #1,d0
  144. .noaudio    move.b    d0,(a0)
  145.         jsr    _LVOEnable(a6)
  146.  
  147. .intdis        bclr.b    #3,$DAA000        ;GAYLE INTENA register
  148.  
  149. .dosclose    movea.l    d7,a6
  150.         movea.l    d6,a1
  151.         jsr    _LVOCloseLibrary(a6)
  152.  
  153. .end        move.l    d4,d0
  154.         rts
  155.  
  156.         dc.b    "$VER: CardReset 3.0 (26.07.2002) written by ArtPo",0
  157.         even
  158.  
  159. .dosname    dc.b    "dos.library",0
  160.         even
  161.  
  162. .template    dc.b    "TICKS/N/K,FORCE/S,AUDIO/T/K",0
  163.         even
  164.  
  165. .ticks        dc.l    0
  166.         dc.l    0
  167.         dc.l    "BOOL"
  168.  
  169. .cardname    dc.b    "card.resource",0
  170.         even
  171.  
  172. .memlist    dcb.b    LN_SIZE,0
  173.  
  174.         dc.w    3
  175.  
  176.         dc.l    MEMF_CLEAR!MEMF_PUBLIC
  177.         dc.l    CardHandle_SIZEOF
  178.  
  179.         dc.l    MEMF_CLEAR!MEMF_PUBLIC
  180.         dc.l    IS_SIZE
  181.  
  182.         dc.l    MEMF_CLEAR!MEMF_PUBLIC
  183.         dc.l    IS_SIZE
  184.  
  185. .ownname    dc.b    "CardReset",0
  186.         even
  187.  
  188. .intcode    rts
  189.